package com.tjetc._2code_block;

public class _2CodeBlockDetail {
    public static void main(String[] args) {
        /*
            代码块细节：
            1.类什么时候被加载
                a. 创建对象实例时(new)
                b. 创建⼦类对象实例，⽗类也会被加载
                c. 使⽤类的静态成员时(静态属性，静态⽅法)
         */

//        System.out.println(B.a);

        // 测试单类情况：
        // 1. 加载类
        // 2. 开始new 创建对象
//        B b = new B();

        // 测试父子类情况：
        // 1.完成了父子类的加载
        // 2.创建子类对象
        C c = new C();
    }
}

// 父类
class B {
    static int a = 1;

    {
        System.out.println("A");
    }

    static {
        System.out.println("C");
    }

    static int b = 2;

    {
        System.out.println("B");
    }

    int c = 3;


    static {
        System.out.println("D");
    }

    int d = 4;

    public B() {
        System.out.println("E");
    }

    public void f(){
        System.out.println(B.a);
        System.out.println(this.c);
        System.out.println(C.a);
    }

    public static void f1() {
        System.out.println(B.a);
//        System.out.println(this.c);
        System.out.println(C.a);
    }

}

// 子类
class C extends B {
    static int a = 1;

    {
        System.out.println("A");
    }

    static {
        System.out.println("C");
    }

    static int b = 2;

    {
        System.out.println("B");
    }

    int c = 3;


    static {
        System.out.println("D");
    }

    int d = 4;

    public C() {
        System.out.println("E");
    }

    public void f(){
        System.out.println(super.c);
        System.out.println(B.a);
        System.out.println(this.c);
        System.out.println(C.a);
    }

    public static void f1() {
//        System.out.println(super.c);
        System.out.println(B.a);
//        System.out.println(this.c);
        System.out.println(C.a);
    }
}
